import math
import segyio

def get_direction(filename):
    with segyio.open(filename, "r", ignore_geometry=True) as f:
        # 获取轨迹头信息
        trace_headers = f.header
        # 获取第一个轨迹的地理坐标
        first_trace_header = trace_headers[0]
        source_x = first_trace_header[segyio.su.cdpx]  # 源点X坐标
        source_y = first_trace_header[segyio.su.cdpy]  # 源点Y坐标
        print(f"Source X: {source_x}, Source Y: {source_y}")
        # 获取第二个轨迹的地理坐标
        second_trace_header = trace_headers[1]
        source_x2 = second_trace_header[segyio.su.cdpx]
        source_y2 = second_trace_header[segyio.su.cdpy]
        print(f"Source X2: {source_x2}, Source Y2: {source_y2}")

        # 计算方向
        delta_x = source_x2 - source_x
        delta_y = source_y2 - source_y
        direction = None
        if delta_y == 0:  # 东西
            direction = 'east_west'
        elif delta_x == 0:  # 南北
            direction = 'north_sourth'
        else:  # 对角线
            # 计算坐标差
            delta_x = source_x2 - source_x
            delta_y = source_y2 - source_y
            angle_radians = math.atan2(delta_y, delta_x)  # 计算对角线角度（弧度）
            angle_degrees = math.degrees(angle_radians)  # 将弧度转换为度数
            print(f"Angle in degrees: {angle_degrees}")
            direction = angle_degrees

        return direction

# 查找该数据道，第一个不为0的时间点
def find_first_non_zero_time(data, start_index):
    """
    从指定的起始索引开始，查找第一个非零值的时间索引。
    :param data: 数据数组
    :param start_index: 起始索引
    :return: 第一个非零值的时间索引，如果没有非零值，返回None
    """
    for i in range(start_index, len(data)):
        if data[i] != 0:
            return i
    return None

# 获取偏移的时间
def get_incline_time(file_path, start_trace=404):
    """
    处理SEG-Y文件，从指定道开始，逐道查找第一个非零值的时间。
    :param file_path: SEG-Y文件路径
    :param start_trace: 起始道编号
    """
    with segyio.open(file_path, strict=False, ignore_geometry=True) as segyfile:
        # 获取采样间隔（ms）
        sample_interval = segyfile.bin[segyio.BinField.Interval] / 1000  # 转换为ms
        print(f"采样间隔: {sample_interval} ms")

        # 从指定道开始处理
        trace_index = start_trace - 1  # segyio的道索引从0开始
        while trace_index >= 0:
            # 读取当前道的数据
            trace_data = segyfile.trace[trace_index]

            # 如果是第一道，从0ms开始排查
            if trace_index == start_trace - 1:
                start_time_index = 0
            else:
                # 否则从上一道记录的时间开始排查
                start_time_index = last_non_zero_time

            # 查找第一个非零值的时间索引
            non_zero_time_index = find_first_non_zero_time(trace_data, start_time_index)
            if non_zero_time_index is not None:
                non_zero_time = non_zero_time_index * sample_interval
                print(f"道 {trace_index + 1}: 第一个非零值的时间为 {non_zero_time} ms")
                last_non_zero_time = non_zero_time_index
            else:
                print(f"道 {trace_index + 1}: 没有找到非零值")
                break

            # 准备处理下一道
            trace_index -= 1

if __name__ == "__main__":
    filename = r"E:\vspData\出图文件试验版\Tk1_最终拉平1ms_COR100.sgy"
    direction = get_direction(filename)
    print(direction)
